package optiondef

// import (
// 	"encoding/json"
// 	"errors"
// 	"fmt"
// 	"photowall/pkg/config"
// 	"photowall/pkg/log"
// 	"strconv"
// 	"strings"
// 	"sync"

// 	"github.com/jmoiron/sqlx"
// )

// var (
// 	wechatSqlConnSyncOnce sync.Once
// 	wechatSqlConn         *sqlx.DB
// )

// //description: 获取链接微信数据库的 db 指针, 该函数实现使用单例模式
// //return {*sqlx.DB}

// func getMariadbConn() *sqlx.DB {
// 	wechatSqlConnSyncOnce.Do(func() {
// 		//用户名:密码 @tcp(ip:端口)/数据库的名字
// 		dsn := config.GetConfig().ServiceConfig.DatabaseConfig.DatabaseUserName + ":" +
// 			config.GetConfig().ServiceConfig.DatabaseConfig.DatabasePassword +
// 			"@tcp(" + config.GetConfig().ServiceConfig.DatabaseConfig.MariadbAddr +
// 			")/" + config.GetConfig().ServiceConfig.DatabaseConfig.DatabaseName +
// 			"?charset=" + config.GetConfig().ServiceConfig.DatabaseConfig.DatabaseCharset

// 		// 连接数据集
// 		db, err := sqlx.Connect("mysql", dsn)
// 		if err != nil {
// 			log.GetDatabaseLogger().Error(fmt.Sprintf("connect DB failed, err:%v\n", err.Error()))
// 			panic(err)
// 		}
// 		db.SetMaxOpenConns(10)
// 		db.SetMaxIdleConns(10)

// 		wechatSqlConn = db
// 	})

// 	return wechatSqlConn
// }

// var (
// 	addUserStmt         *sqlx.Stmt
// 	addUserStmtSyncOnce sync.Once
// )

// //description: 添加微信用户，传入微信结构体，在微信用户数据库插入
// //param {*objdef.WechatUser} wechatUser
// //return {bool}

// func addWechatUserInMariadb(wechatUser *WxUserDbInfo) (bool, error) {
// 	addUserStmtSyncOnce.Do(func() {
// 		stmt, err := getMariadbConn().Preparex(`insert into wechat_user
// 		values(?, ?, ?, ?, ?, ?)`)
// 		if err != nil {
// 			log.GetDatabaseLogger().Error(err.Error())
// 			panic(err)
// 		}

// 		addUserStmt = stmt
// 	})

// 	result, err := addUserStmt.Exec(wechatUser.OpenID, wechatUser.UnionID, wechatUser.UserName,
// 		wechatUser.PhoneNumber, wechatUser.Password, wechatUser.SessionKey)
// 	if err != nil {
// 		jsonStr, err := json.Marshal(wechatUser)
// 		log.GetDatabaseLogger().Error("insert user failed: " + string(jsonStr) + " " +
// 			err.Error())
// 		return false, err
// 	}

// 	result.LastInsertId()
// 	affctedRow, err := result.RowsAffected()
// 	if err != nil {
// 		log.GetDatabaseLogger().Error("this dabase not support this function: RowsAffected" + err.Error())
// 		return false, err
// 	}

// 	if affctedRow > 0 {
// 		return true, nil
// 	}

// 	return false, errors.New(`not a valid path`)
// }

// var (
// 	queryUserStmt         *sqlx.Stmt
// 	queryUserStmtSyncOnce sync.Once
// )

// //description: 使用微信的 open_id 查询微信用户，返回微信用户结构体
// //param {string} openid
// //return {*objdef.WechatUser}

// func getWechatUserByOpenIDInMariadb(openid string) (*WxUserDbInfo, error) {
// 	queryUserStmtSyncOnce.Do(func() {
// 		stmt, err := getMariadbConn().Preparex("select * from wechat_user where open_id = ?")
// 		if err != nil {
// 			log.GetDatabaseLogger().Error(err.Error())
// 			panic(err)
// 		}

// 		queryUserStmt = stmt
// 	})

// 	var wecchatuser WxUserDbInfo
// 	err := queryUserStmt.Get(&wecchatuser, openid)
// 	if err != nil {
// 		log.GetDatabaseLogger().Error("query wechat user failed: " + err.Error() + openid)
// 		return nil, err
// 	}

// 	return &wecchatuser, nil
// }

// var (
// 	queryUserByUserIDStmt         *sqlx.Stmt
// 	queryUserByUserIDStmtSyncOnce sync.Once
// )

// //description: 使用微信的 open_id 查询微信用户，返回微信用户结构体
// //param {string} openid
// //return {*objdef.WechatUser}

// func getWechatUserByUserIDInMariadb(userID string) (*WxUserDbInfo, error) {
// 	queryUserByUserIDStmtSyncOnce.Do(func() {
// 		stmt, err := getMariadbConn().Preparex("select * from wechat_user where user_id = ?")
// 		if err != nil {
// 			log.GetDatabaseLogger().Error(err.Error())
// 			panic(err)
// 		}

// 		queryUserByUserIDStmt = stmt
// 	})

// 	var wecchatuser WxUserDbInfo
// 	err := queryUserByUserIDStmt.Get(&wecchatuser, userID)
// 	if err != nil {
// 		log.GetDatabaseLogger().Error("query wechat user failed: " + err.Error() + userID)
// 		return nil, err
// 	}

// 	return &wecchatuser, nil
// }

// var (
// 	queryWechatUserStmt         *sqlx.Stmt
// 	queryWechatUserStmtSyncOnce sync.Once
// )

// //description: 查询微信用户数量
// //return {int64} 查询失败返回 -1

// func getWechatUserNumInMariadb() int64 {
// 	queryWechatUserStmtSyncOnce.Do(func() {
// 		stmt, err := getMariadbConn().Preparex("select count(*) from wechat_user")
// 		if err != nil {
// 			log.GetDatabaseLogger().Error(err.Error())
// 			panic(err)
// 		}

// 		queryWechatUserStmt = stmt
// 	})

// 	result := queryWechatUserStmt.QueryRowx()
// 	var toltal int64
// 	err := result.Scan(&toltal)
// 	if err != nil {
// 		log.GetDatabaseLogger().Error(err.Error())
// 		return -1
// 	}

// 	return toltal
// }

// var (
// 	isWechatUserExistStmt         *sqlx.Stmt
// 	isWechatUserExistStmtSyncOnce sync.Once
// )

// //description: 查询是否存在该微信用户
// //param {string} openID
// //return {*}

// func isWechatUserExistInMariadb(openID string) bool {
// 	isWechatUserExistStmtSyncOnce.Do(func() {
// 		stmt, err := getMariadbConn().Preparex("SELECT EXISTS(SELECT 1 FROM wechat_user WHERE open_id = ?);")
// 		if err != nil {
// 			log.GetDatabaseLogger().Error(err.Error())
// 			panic(err)
// 		}

// 		isWechatUserExistStmt = stmt
// 	})

// 	var res int
// 	err := isWechatUserExistStmt.Get(&res, openID)
// 	if err != nil {
// 		log.GetDatabaseLogger().Error("can not exec isWechatUserExist options " + err.Error())
// 		return false
// 	}

// 	if res == 1 {
// 		return true
// 	}

// 	return false
// }

// var (
// 	updateWechatUserStmt         *sqlx.Stmt
// 	updateWechatUserStmtSyncOnce sync.Once
// )

// //description: 修改微信用户的信息
// //param {*objdef.WechatUser} wechatUser
// //return {bool} 返回 false 失败

// func updateWechatUserInMariadb(wechatUser *WxUserDbInfo) bool {
// 	updateWechatUserStmtSyncOnce.Do(func() {
// 		stmt, err := getMariadbConn().Preparex(`updatr wechat_user
// 		set open_id=? union_id=? user_name=? phone_number=? password=? session_key=?
// 		where open_id=?`)
// 		if err != nil {
// 			log.GetDatabaseLogger().Error(err.Error())
// 			panic(err)
// 		}

// 		updateWechatUserStmt = stmt
// 	})

// 	if len(strings.TrimSpace(wechatUser.OpenID)) == 0 {
// 		return false
// 	}

// 	res, err := updateWechatUserStmt.Exec(wechatUser.OpenID, wechatUser.UnionID, wechatUser.UserName,
// 		wechatUser.PhoneNumber, wechatUser.SessionKey, wechatUser.OpenID)
// 	if err != nil {
// 		log.GetDatabaseLogger().Error("UpdateWechatUser failed, " + err.Error())
// 		return false
// 	}

// 	n, err := res.RowsAffected()
// 	if err != nil {
// 		fmt.Printf("get RowsAffected failed, err:%v\n", err)
// 		return false
// 	}

// 	if n == 1 {
// 		return true
// 	}

// 	return false
// }

// // var (
// // 	updateWechatUserSessionKeyStmt         *sqlx.Stmt
// // 	updateWechatUserSessionKeyStmtSyncOnce sync.Once
// // )

// // //description: 修改微信用户的信息
// // //param {*objdef.WechatUser} wechatUser
// // //return {bool} 返回 false 失败

// // func updateWechatUserSessionKey(openID string, sessionKey string) bool {
// // 	updateWechatUserSessionKeyStmtSyncOnce.Do(func() {
// // 		stmt, err := getMariadbConn().Preparex(`update wechat_user
// // 		set session_key=?
// // 		where open_id=?`)
// // 		if err != nil {
// // 			log.GetDatabaseLogger().Error(err.Error())
// // 			panic(err)
// // 		}

// // 		updateWechatUserSessionKeyStmt = stmt
// // 	})

// // 	if len(strings.TrimSpace(openID)) == 0 {
// // 		return false
// // 	}

// // 	res, err := updateWechatUserSessionKeyStmt.Exec(sessionKey, openID)
// // 	if err != nil {
// // 		log.GetDatabaseLogger().Error("updateWechatUserSessionKey session_key failed, " + err.Error())
// // 		return false
// // 	}

// // 	n, err := res.RowsAffected()
// // 	if err != nil {
// // 		fmt.Printf("updateWechatUserSessionKey get RowsAffected failed, err:%v\n", err)
// // 		return false
// // 	}

// // 	if n == 1 {
// // 		return true
// // 	}

// // 	return false
// // }

// var (
// 	deleteWechatUserStmt         *sqlx.Stmt
// 	deleteWechatUserStmtSyncOnce sync.Once
// )

// //description: 通过 openid 来删除wechat user
// //param {string} openID
// //return {bool} 返回 false 删除失败

// func deleteWehcatUserByOpenIDInMariadb(openID string) (bool, error) {
// 	deleteWechatUserStmtSyncOnce.Do(func() {
// 		stmt, err := getMariadbConn().Preparex(`delete from wechat_user where open_id=?`)
// 		if err != nil {
// 			log.GetDatabaseLogger().Error(err.Error())
// 			panic(err)
// 		}

// 		deleteWechatUserStmt = stmt
// 	})

// 	res, err := deleteWechatUserStmt.Exec(openID)
// 	if err != nil {
// 		log.GetDatabaseLogger().Error("delete wechatUser failed, " + err.Error())
// 		return false, err
// 	}

// 	n, err := res.RowsAffected()
// 	if err != nil {
// 		log.GetDatabaseLogger().Error("delete user failed, " + openID + " " + err.Error())
// 		return false, err
// 	}

// 	if n == 1 {
// 		return true, nil
// 	} else if n == 0 {
// 		log.GetDatabaseLogger().Error("试图删除一个不存在的 openid ," + openID)
// 		return false, errors.New("试图删除一个不存在的 openid ," + openID)
// 	} else {
// 		log.GetDatabaseLogger().Error("删除了多个 openid 的用户, 总共有 " + strconv.FormatInt(n, 10) +
// 			"个用户收到影响")
// 		return true, nil
// 	}
// }
